package tsi

import (
	watchmessgae "earth/watch_tcp/watch_message"
	"errors"

	"github.com/sirupsen/logrus"
)

/*
终端发送:
实例:
[DW*334588000000156*00CD*UD,160918,025723,A,22.570733,N,113.8626083,E,0.00,249.5,0.0,6,
100,60,0,00000010,7,255,460,1,9529,21809,158,9529,63555,133,9529,63554,129,9529,21405,1
26,9529,21242,124,9529,21151,120,9529,63556,119,0]
说明：
数据内容:
UD,命令号
160918,日期（日月年）（0 时区），表示 0 时区的二零一八年九月十六号
025723,时间（时分秒）（0 时区），表示 0 时区的两点五十七分二十三秒
A,gps 定位有效
22.570733,纬度
N,纬度表示
113.8626083,经度
E,经度表示
0.00,速度
249.5,方向
0.0,海拔
6,卫星个数
100,gsm 信号强度
60,电量
0,计步数
00000010,终端状态，数据为 16 进制，解析成二进制为 0000 0000 0000 0000 0000 0000 0001 0000
前面 4 个字节表示状态，后面 4 个字节表示报警，数据中第 4 位为 1，对照文档最后的数据解析，表
示手表静止状态。详细可参看文档最后部分。
7,基站个数
255,460,1,9529,21809,158,9529,63555,133,9529,63554,129,9529,21405,126,9529,21242,124,95
29,21151,120,9529,63556,119,基站信息
0,WiFi 个数
平台不需要回复
说明:终端按照设定间隔上报位置和状态信息,不需要平台回复.
*/

// 位置数据上报
type UD struct {
	Date          string // 日期
	Time          string // 时间
	Location      string // gps 定位有效
	Latitude      string // 纬度
	LatitudeType  string // 纬度表示
	Longitude     string // 经度
	LongitudeType string // 经度表示
	Speed         string // 速度
	Direction     string // 方向
	Altitude      string // 海拔
	Satellite     string // 卫星个数
	GSM           string // gsm 信号强度
	Battery       string // 电量
	StepCount     string // 计步数
	TerminalState string // 终端状态
	BaseStation   string // 基站个数
	WiFi          string // WiFi 个数
}

func DealUD(watchMessage *watchmessgae.WatchMessage, deviceID string) error {
	// 校验消息长度
	if len(watchMessage.MessageContentList) < 17 {
		logrus.Error("message is too short:", watchMessage.MessageContentList)
		return errors.New("message is too short")
	}
	// 解析消息内容
	ud := &UD{}
	ud.Date = watchMessage.MessageContentList[0]
	ud.Time = watchMessage.MessageContentList[1]
	ud.Location = watchMessage.MessageContentList[2]
	ud.Latitude = watchMessage.MessageContentList[3]
	ud.LatitudeType = watchMessage.MessageContentList[4]
	ud.Longitude = watchMessage.MessageContentList[5]
	ud.LongitudeType = watchMessage.MessageContentList[6]
	ud.Speed = watchMessage.MessageContentList[7]
	ud.Direction = watchMessage.MessageContentList[8]
	ud.Altitude = watchMessage.MessageContentList[9]
	ud.Satellite = watchMessage.MessageContentList[10]
	ud.GSM = watchMessage.MessageContentList[11]
	ud.Battery = watchMessage.MessageContentList[12]
	ud.StepCount = watchMessage.MessageContentList[13]
	ud.TerminalState = watchMessage.MessageContentList[14]
	ud.BaseStation = watchMessage.MessageContentList[15]
	// TODO: 解析基站信息
	//基站个数等于消息分割长度减去其他所有字段的总数
	// baseStationTotal := len(watchMessage.MessageContentList) - 16
	// baseStationList := watchMessage.MessageContentList[15 : 15+baseStationTotal]
	// ud.BaseStation = strings.Join(baseStationList, ",")
	// ud.WiFi = watchMessage.MessageContentList[15+baseStationTotal]
	return SendEvent(deviceID, ud, "UD")
}
